{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np # linear algebra\n",
    "import pandas as pd \n",
    "from xgboost import XGBRegressor\n",
    "from lightgbm import LGBMRegressor\n",
    "from catboost import CatBoostRegressor\n",
    "import time\n",
    "from sklearn.model_selection import *\n",
    "from sklearn.metrics import *\n",
    "from sklearn.linear_model import *\n",
    "from wordcloud import WordCloud, STOPWORDS\n",
    "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\n",
    "from nltk.tokenize import TreebankWordTokenizer\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import mean_squared_log_error\n",
    "def custom_metric(y_true, y_preds):\n",
    "    return np.sqrt(mean_squared_log_error(y_true, y_preds))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0",
    "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a"
   },
   "outputs": [],
   "source": [
    "train = pd.read_csv('/kaggle/input/used-electronics-data/Train.csv')\n",
    "test = pd.read_csv('/kaggle/input/used-electronics-data/Test.csv')\n",
    "sample_sub = pd.read_excel('/kaggle/input/used-electronics-data/Sample_Submission.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f90c874a3d0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "wc = WordCloud(background_color='white',\n",
    "                    stopwords =  set(STOPWORDS),\n",
    "                    max_words = 50, \n",
    "                    random_state = 42,)\n",
    "wc.generate(' '.join(train['Model_Info']))\n",
    "plt.imshow(wc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.concat([train, test], axis=0).reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Brand</th>\n",
       "      <th>Model_Info</th>\n",
       "      <th>Additional_Description</th>\n",
       "      <th>Locality</th>\n",
       "      <th>City</th>\n",
       "      <th>State</th>\n",
       "      <th>Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>name0 name234 64gb space grey</td>\n",
       "      <td>1yesr old mobile number 999two905two99 bill c...</td>\n",
       "      <td>878</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>15000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>phone 7 name42 name453 new condition box acce...</td>\n",
       "      <td>101004800 1010065900 7000</td>\n",
       "      <td>1081</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>18800.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>name0 x 256gb leess used good condition</td>\n",
       "      <td>1010010000 seperate screen guard 3 back cover...</td>\n",
       "      <td>495</td>\n",
       "      <td>11</td>\n",
       "      <td>4</td>\n",
       "      <td>50000.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>name0 6s plus 64 gb space grey</td>\n",
       "      <td>without 1010020100 id 1010010300 colour 10100...</td>\n",
       "      <td>287</td>\n",
       "      <td>10</td>\n",
       "      <td>7</td>\n",
       "      <td>16500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>phone 7 sealed pack brand new factory outet p...</td>\n",
       "      <td>101008700 10100000 xs max 64 gb made 10100850...</td>\n",
       "      <td>342</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>26499.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Brand                                         Model_Info  \\\n",
       "0      1                      name0 name234 64gb space grey   \n",
       "1      1   phone 7 name42 name453 new condition box acce...   \n",
       "2      1            name0 x 256gb leess used good condition   \n",
       "3      1                     name0 6s plus 64 gb space grey   \n",
       "4      1   phone 7 sealed pack brand new factory outet p...   \n",
       "\n",
       "                              Additional_Description  Locality  City  State  \\\n",
       "0   1yesr old mobile number 999two905two99 bill c...       878     8      2   \n",
       "1                          101004800 1010065900 7000      1081     4      0   \n",
       "2   1010010000 seperate screen guard 3 back cover...       495    11      4   \n",
       "3   without 1010020100 id 1010010300 colour 10100...       287    10      7   \n",
       "4   101008700 10100000 xs max 64 gb made 10100850...       342     4      0   \n",
       "\n",
       "     Price  \n",
       "0  15000.0  \n",
       "1  18800.0  \n",
       "2  50000.0  \n",
       "3  16500.0  \n",
       "4  26499.0  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.get_dummies(df, columns = ['Brand', 'City', 'State', 'Locality'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "cvec = TfidfVectorizer(max_features=10000, norm = 'l1', lowercase=True, smooth_idf=False, sublinear_tf=False, ngram_range=(1,4), tokenizer=TreebankWordTokenizer().tokenize)\n",
    "df_info = pd.DataFrame(cvec.fit_transform(df['Model_Info']).todense())\n",
    "df_info.columns = ['Model_Info_Top_' + str(c) for c in df_info.columns]\n",
    "df = pd.concat([df, df_info], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_gb(x):\n",
    "    matches = re.findall('[0-9]+(?=\\s*gb)', x)\n",
    "    if len(matches) == 0:\n",
    "        return np.nan\n",
    "    else:\n",
    "        return int(matches[0])\n",
    "df['gb'] = df['Model_Info'].apply(lambda x: get_gb(x))\n",
    "df['gb2'] = df['Additional_Description'].apply(lambda x: get_gb(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "train, test  = df[:train.shape[0]].reset_index(drop=True), df[train.shape[0]:].reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Model_Info', 'Additional_Description', 'Price', 'Brand_0', 'Brand_1',\n",
       "       'Brand_2', 'Brand_3', 'City_0', 'City_1', 'City_2',\n",
       "       ...\n",
       "       'Model_Info_Top_9992', 'Model_Info_Top_9993', 'Model_Info_Top_9994',\n",
       "       'Model_Info_Top_9995', 'Model_Info_Top_9996', 'Model_Info_Top_9997',\n",
       "       'Model_Info_Top_9998', 'Model_Info_Top_9999', 'gb', 'gb2'],\n",
       "      dtype='object', length=11230)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "ID_COL, TARGET_COL = 'id', 'Price'\n",
    "features = [c for c in train.columns if c not in [ID_COL, TARGET_COL, 'Model_Info', 'Additional_Description', 'Locality', 'Brand', 'City', 'State']]\n",
    "target = train[TARGET_COL]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rmse(y_true, y_pred):\n",
    "    return mean_squared_error(y_true, y_pred) ** 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11227\n"
     ]
    }
   ],
   "source": [
    "print(len(features))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "---- Fold 0 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.400465\tvalid_0's l2: 0.160372\n",
      "[200]\tvalid_0's rmse: 0.368424\tvalid_0's l2: 0.135736\n",
      "[300]\tvalid_0's rmse: 0.368634\tvalid_0's l2: 0.135891\n",
      "[400]\tvalid_0's rmse: 0.371005\tvalid_0's l2: 0.137645\n",
      "Early stopping, best iteration is:\n",
      "[238]\tvalid_0's rmse: 0.36675\tvalid_0's l2: 0.134505\n",
      "\n",
      " Fold 0.36674959710599647\n",
      "\n",
      "->-> Fold ran for 0 minutes 6 seconds\n",
      "\n",
      "---- Fold 1 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.502611\tvalid_0's l2: 0.252618\n",
      "[200]\tvalid_0's rmse: 0.466942\tvalid_0's l2: 0.218035\n",
      "[300]\tvalid_0's rmse: 0.466458\tvalid_0's l2: 0.217583\n",
      "[400]\tvalid_0's rmse: 0.468607\tvalid_0's l2: 0.219593\n",
      "Early stopping, best iteration is:\n",
      "[273]\tvalid_0's rmse: 0.465148\tvalid_0's l2: 0.216363\n",
      "\n",
      " Fold 0.4651481042736544\n",
      "\n",
      "->-> Fold ran for 0 minutes 5 seconds\n",
      "\n",
      "---- Fold 2 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.466331\tvalid_0's l2: 0.217465\n",
      "[200]\tvalid_0's rmse: 0.434117\tvalid_0's l2: 0.188457\n",
      "[300]\tvalid_0's rmse: 0.431219\tvalid_0's l2: 0.18595\n",
      "[400]\tvalid_0's rmse: 0.432546\tvalid_0's l2: 0.187096\n",
      "Early stopping, best iteration is:\n",
      "[280]\tvalid_0's rmse: 0.430301\tvalid_0's l2: 0.185159\n",
      "\n",
      " Fold 0.43030128618566066\n",
      "\n",
      "->-> Fold ran for 0 minutes 5 seconds\n",
      "\n",
      "---- Fold 3 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.436311\tvalid_0's l2: 0.190367\n",
      "[200]\tvalid_0's rmse: 0.392435\tvalid_0's l2: 0.154005\n",
      "[300]\tvalid_0's rmse: 0.390591\tvalid_0's l2: 0.152562\n",
      "[400]\tvalid_0's rmse: 0.393385\tvalid_0's l2: 0.154752\n",
      "[500]\tvalid_0's rmse: 0.3947\tvalid_0's l2: 0.155788\n",
      "Early stopping, best iteration is:\n",
      "[302]\tvalid_0's rmse: 0.390496\tvalid_0's l2: 0.152487\n",
      "\n",
      " Fold 0.3904957518998356\n",
      "\n",
      "->-> Fold ran for 0 minutes 5 seconds\n",
      "\n",
      "---- Fold 4 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.580441\tvalid_0's l2: 0.336912\n",
      "[200]\tvalid_0's rmse: 0.539495\tvalid_0's l2: 0.291055\n",
      "[300]\tvalid_0's rmse: 0.53278\tvalid_0's l2: 0.283855\n",
      "[400]\tvalid_0's rmse: 0.532864\tvalid_0's l2: 0.283944\n",
      "[500]\tvalid_0's rmse: 0.537573\tvalid_0's l2: 0.288985\n",
      "Early stopping, best iteration is:\n",
      "[338]\tvalid_0's rmse: 0.531582\tvalid_0's l2: 0.282579\n",
      "\n",
      " Fold 0.5315815941550788\n",
      "\n",
      "->-> Fold ran for 0 minutes 6 seconds\n",
      "\n",
      "---- Fold 5 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.373386\tvalid_0's l2: 0.139417\n",
      "[200]\tvalid_0's rmse: 0.350649\tvalid_0's l2: 0.122955\n",
      "[300]\tvalid_0's rmse: 0.358421\tvalid_0's l2: 0.128465\n",
      "Early stopping, best iteration is:\n",
      "[182]\tvalid_0's rmse: 0.350305\tvalid_0's l2: 0.122713\n",
      "\n",
      " Fold 0.3503048215831391\n",
      "\n",
      "->-> Fold ran for 0 minutes 4 seconds\n",
      "\n",
      "---- Fold 6 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.488314\tvalid_0's l2: 0.238451\n",
      "[200]\tvalid_0's rmse: 0.468604\tvalid_0's l2: 0.219589\n",
      "[300]\tvalid_0's rmse: 0.467165\tvalid_0's l2: 0.218243\n",
      "[400]\tvalid_0's rmse: 0.46984\tvalid_0's l2: 0.22075\n",
      "Early stopping, best iteration is:\n",
      "[281]\tvalid_0's rmse: 0.466893\tvalid_0's l2: 0.217989\n",
      "\n",
      " Fold 0.46689273408643034\n",
      "\n",
      "->-> Fold ran for 0 minutes 5 seconds\n",
      "\n",
      "---- Fold 7 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.452469\tvalid_0's l2: 0.204728\n",
      "[200]\tvalid_0's rmse: 0.423991\tvalid_0's l2: 0.179768\n",
      "[300]\tvalid_0's rmse: 0.417721\tvalid_0's l2: 0.174491\n",
      "[400]\tvalid_0's rmse: 0.412169\tvalid_0's l2: 0.169884\n",
      "[500]\tvalid_0's rmse: 0.409719\tvalid_0's l2: 0.16787\n",
      "[600]\tvalid_0's rmse: 0.407834\tvalid_0's l2: 0.166329\n",
      "[700]\tvalid_0's rmse: 0.40687\tvalid_0's l2: 0.165543\n",
      "[800]\tvalid_0's rmse: 0.40585\tvalid_0's l2: 0.164714\n",
      "[900]\tvalid_0's rmse: 0.405474\tvalid_0's l2: 0.164409\n",
      "[1000]\tvalid_0's rmse: 0.405362\tvalid_0's l2: 0.164319\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[999]\tvalid_0's rmse: 0.405341\tvalid_0's l2: 0.164301\n",
      "\n",
      " Fold 0.4053412118435022\n",
      "\n",
      "->-> Fold ran for 0 minutes 8 seconds\n",
      "\n",
      "---- Fold 8 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.409319\tvalid_0's l2: 0.167542\n",
      "[200]\tvalid_0's rmse: 0.348232\tvalid_0's l2: 0.121266\n",
      "[300]\tvalid_0's rmse: 0.338269\tvalid_0's l2: 0.114426\n",
      "[400]\tvalid_0's rmse: 0.335501\tvalid_0's l2: 0.112561\n",
      "[500]\tvalid_0's rmse: 0.335252\tvalid_0's l2: 0.112394\n",
      "[600]\tvalid_0's rmse: 0.336038\tvalid_0's l2: 0.112921\n",
      "Early stopping, best iteration is:\n",
      "[415]\tvalid_0's rmse: 0.334925\tvalid_0's l2: 0.112175\n",
      "\n",
      " Fold 0.3349246465489157\n",
      "\n",
      "->-> Fold ran for 0 minutes 6 seconds\n",
      "\n",
      "---- Fold 9 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.336869\tvalid_0's l2: 0.11348\n",
      "[200]\tvalid_0's rmse: 0.303167\tvalid_0's l2: 0.0919102\n",
      "[300]\tvalid_0's rmse: 0.304015\tvalid_0's l2: 0.0924252\n",
      "[400]\tvalid_0's rmse: 0.308601\tvalid_0's l2: 0.0952343\n",
      "Early stopping, best iteration is:\n",
      "[216]\tvalid_0's rmse: 0.301888\tvalid_0's l2: 0.0911362\n",
      "\n",
      " Fold 0.30188773702520144\n",
      "\n",
      "->-> Fold ran for 0 minutes 5 seconds\n",
      "\n",
      "---- Fold 10 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.509324\tvalid_0's l2: 0.259411\n",
      "[200]\tvalid_0's rmse: 0.490317\tvalid_0's l2: 0.240411\n",
      "[300]\tvalid_0's rmse: 0.494687\tvalid_0's l2: 0.244716\n",
      "Early stopping, best iteration is:\n",
      "[187]\tvalid_0's rmse: 0.48971\tvalid_0's l2: 0.239815\n",
      "\n",
      " Fold 0.48970953209547813\n",
      "\n",
      "->-> Fold ran for 0 minutes 4 seconds\n",
      "\n",
      "---- Fold 11 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.4191\tvalid_0's l2: 0.175644\n",
      "[200]\tvalid_0's rmse: 0.39446\tvalid_0's l2: 0.155598\n",
      "[300]\tvalid_0's rmse: 0.390595\tvalid_0's l2: 0.152565\n",
      "[400]\tvalid_0's rmse: 0.393606\tvalid_0's l2: 0.154926\n",
      "[500]\tvalid_0's rmse: 0.394262\tvalid_0's l2: 0.155443\n",
      "Early stopping, best iteration is:\n",
      "[314]\tvalid_0's rmse: 0.390133\tvalid_0's l2: 0.152203\n",
      "\n",
      " Fold 0.3901326458246845\n",
      "\n",
      "->-> Fold ran for 0 minutes 6 seconds\n",
      "\n",
      "---- Fold 12 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.462435\tvalid_0's l2: 0.213846\n",
      "[200]\tvalid_0's rmse: 0.420386\tvalid_0's l2: 0.176724\n",
      "[300]\tvalid_0's rmse: 0.418627\tvalid_0's l2: 0.175249\n",
      "[400]\tvalid_0's rmse: 0.422681\tvalid_0's l2: 0.178659\n",
      "Early stopping, best iteration is:\n",
      "[266]\tvalid_0's rmse: 0.417398\tvalid_0's l2: 0.174221\n",
      "\n",
      " Fold 0.4173976786734718\n",
      "\n",
      "->-> Fold ran for 0 minutes 5 seconds\n",
      "\n",
      "---- Fold 13 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.514721\tvalid_0's l2: 0.264937\n",
      "[200]\tvalid_0's rmse: 0.465239\tvalid_0's l2: 0.216448\n",
      "[300]\tvalid_0's rmse: 0.456301\tvalid_0's l2: 0.208211\n",
      "[400]\tvalid_0's rmse: 0.45582\tvalid_0's l2: 0.207772\n",
      "[500]\tvalid_0's rmse: 0.454967\tvalid_0's l2: 0.206995\n",
      "[600]\tvalid_0's rmse: 0.454742\tvalid_0's l2: 0.20679\n",
      "[700]\tvalid_0's rmse: 0.455601\tvalid_0's l2: 0.207572\n",
      "[800]\tvalid_0's rmse: 0.456511\tvalid_0's l2: 0.208403\n",
      "Early stopping, best iteration is:\n",
      "[618]\tvalid_0's rmse: 0.454645\tvalid_0's l2: 0.206702\n",
      "\n",
      " Fold 0.45464454827065043\n",
      "\n",
      "->-> Fold ran for 0 minutes 7 seconds\n",
      "\n",
      "---- Fold 14 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.655441\tvalid_0's l2: 0.429603\n",
      "[200]\tvalid_0's rmse: 0.632022\tvalid_0's l2: 0.399452\n",
      "[300]\tvalid_0's rmse: 0.630174\tvalid_0's l2: 0.39712\n",
      "[400]\tvalid_0's rmse: 0.629125\tvalid_0's l2: 0.395798\n",
      "[500]\tvalid_0's rmse: 0.630034\tvalid_0's l2: 0.396943\n",
      "[600]\tvalid_0's rmse: 0.628824\tvalid_0's l2: 0.39542\n",
      "[700]\tvalid_0's rmse: 0.628575\tvalid_0's l2: 0.395107\n",
      "[800]\tvalid_0's rmse: 0.628137\tvalid_0's l2: 0.394556\n",
      "[900]\tvalid_0's rmse: 0.627506\tvalid_0's l2: 0.393764\n",
      "[1000]\tvalid_0's rmse: 0.627819\tvalid_0's l2: 0.394156\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[927]\tvalid_0's rmse: 0.627349\tvalid_0's l2: 0.393566\n",
      "\n",
      " Fold 0.627348692498003\n",
      "\n",
      "->-> Fold ran for 0 minutes 8 seconds\n",
      "\n",
      "---- Fold 15 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.416049\tvalid_0's l2: 0.173097\n",
      "[200]\tvalid_0's rmse: 0.36151\tvalid_0's l2: 0.13069\n",
      "[300]\tvalid_0's rmse: 0.348928\tvalid_0's l2: 0.121751\n",
      "[400]\tvalid_0's rmse: 0.34455\tvalid_0's l2: 0.118715\n",
      "[500]\tvalid_0's rmse: 0.342383\tvalid_0's l2: 0.117226\n",
      "[600]\tvalid_0's rmse: 0.341938\tvalid_0's l2: 0.116922\n",
      "[700]\tvalid_0's rmse: 0.341593\tvalid_0's l2: 0.116686\n",
      "[800]\tvalid_0's rmse: 0.342551\tvalid_0's l2: 0.117341\n",
      "Early stopping, best iteration is:\n",
      "[640]\tvalid_0's rmse: 0.341446\tvalid_0's l2: 0.116585\n",
      "\n",
      " Fold 0.3414458488941327\n",
      "\n",
      "->-> Fold ran for 0 minutes 7 seconds\n",
      "\n",
      "---- Fold 16 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.392984\tvalid_0's l2: 0.154437\n",
      "[200]\tvalid_0's rmse: 0.350371\tvalid_0's l2: 0.12276\n",
      "[300]\tvalid_0's rmse: 0.341847\tvalid_0's l2: 0.116859\n",
      "[400]\tvalid_0's rmse: 0.339324\tvalid_0's l2: 0.11514\n",
      "[500]\tvalid_0's rmse: 0.338428\tvalid_0's l2: 0.114534\n",
      "[600]\tvalid_0's rmse: 0.338373\tvalid_0's l2: 0.114496\n",
      "[700]\tvalid_0's rmse: 0.337974\tvalid_0's l2: 0.114227\n",
      "[800]\tvalid_0's rmse: 0.33828\tvalid_0's l2: 0.114433\n",
      "Early stopping, best iteration is:\n",
      "[691]\tvalid_0's rmse: 0.337834\tvalid_0's l2: 0.114131\n",
      "\n",
      " Fold 0.33783350951905594\n",
      "\n",
      "->-> Fold ran for 0 minutes 7 seconds\n",
      "\n",
      "---- Fold 17 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.449325\tvalid_0's l2: 0.201893\n",
      "[200]\tvalid_0's rmse: 0.419725\tvalid_0's l2: 0.176169\n",
      "[300]\tvalid_0's rmse: 0.415876\tvalid_0's l2: 0.172953\n",
      "[400]\tvalid_0's rmse: 0.414801\tvalid_0's l2: 0.17206\n",
      "[500]\tvalid_0's rmse: 0.413333\tvalid_0's l2: 0.170844\n",
      "[600]\tvalid_0's rmse: 0.411992\tvalid_0's l2: 0.169737\n",
      "[700]\tvalid_0's rmse: 0.411467\tvalid_0's l2: 0.169305\n",
      "[800]\tvalid_0's rmse: 0.411106\tvalid_0's l2: 0.169008\n",
      "[900]\tvalid_0's rmse: 0.411682\tvalid_0's l2: 0.169482\n",
      "Early stopping, best iteration is:\n",
      "[758]\tvalid_0's rmse: 0.410799\tvalid_0's l2: 0.168756\n",
      "\n",
      " Fold 0.4107989482896097\n",
      "\n",
      "->-> Fold ran for 0 minutes 8 seconds\n",
      "\n",
      "---- Fold 18 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.555445\tvalid_0's l2: 0.30852\n",
      "[200]\tvalid_0's rmse: 0.504771\tvalid_0's l2: 0.254794\n",
      "[300]\tvalid_0's rmse: 0.494051\tvalid_0's l2: 0.244086\n",
      "[400]\tvalid_0's rmse: 0.487996\tvalid_0's l2: 0.23814\n",
      "[500]\tvalid_0's rmse: 0.485509\tvalid_0's l2: 0.235719\n",
      "[600]\tvalid_0's rmse: 0.484603\tvalid_0's l2: 0.23484\n",
      "[700]\tvalid_0's rmse: 0.484336\tvalid_0's l2: 0.234581\n",
      "[800]\tvalid_0's rmse: 0.484435\tvalid_0's l2: 0.234677\n",
      "[900]\tvalid_0's rmse: 0.484907\tvalid_0's l2: 0.235135\n",
      "Early stopping, best iteration is:\n",
      "[766]\tvalid_0's rmse: 0.484035\tvalid_0's l2: 0.23429\n",
      "\n",
      " Fold 0.4840346888128409\n",
      "\n",
      "->-> Fold ran for 0 minutes 9 seconds\n",
      "\n",
      "---- Fold 19 -----\n",
      "\n",
      "11227 11227\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[100]\tvalid_0's rmse: 0.400979\tvalid_0's l2: 0.160784\n",
      "[200]\tvalid_0's rmse: 0.368548\tvalid_0's l2: 0.135827\n",
      "[300]\tvalid_0's rmse: 0.367101\tvalid_0's l2: 0.134763\n",
      "[400]\tvalid_0's rmse: 0.371225\tvalid_0's l2: 0.137808\n",
      "Early stopping, best iteration is:\n",
      "[273]\tvalid_0's rmse: 0.366541\tvalid_0's l2: 0.134353\n",
      "\n",
      " Fold 0.3665414306804924\n",
      "\n",
      "->-> Fold ran for 0 minutes 5 seconds\n",
      "\n",
      "OOF val score: 0.42509485335953884\n",
      "\n",
      "->-> Total training time: 2 minutes 12 seconds\n"
     ]
    }
   ],
   "source": [
    "training_start_time = time.time()\n",
    "\n",
    "max_iter = 20\n",
    "folds = StratifiedKFold(n_splits = max_iter)\n",
    "oofs = np.zeros(len(train))\n",
    "test_preds = np.zeros(len(test))\n",
    "\n",
    "\n",
    "for fold_, (trn_idx, val_idx) in enumerate(folds.split(train, pd.qcut(target, 10, labels=False, duplicates='drop'))):\n",
    "    \n",
    "    print(f'\\n---- Fold {fold_} -----\\n')\n",
    "    \n",
    "    fold_start_time = time.time()\n",
    "    \n",
    "    X_trn, y_trn = train.iloc[trn_idx][features], target.iloc[trn_idx]\n",
    "    X_val, y_val = train.iloc[val_idx][features], target.iloc[val_idx]\n",
    "    X_test = test[features]\n",
    "    print(X_trn.shape[1], X_val.shape[1])\n",
    "    \n",
    "    \n",
    "    clf = LGBMRegressor(n_estimators=1000, num_leaves=127, max_depth=-1,min_child_samples=4, learning_rate=0.02, colsample_bytree=0.4, reg_alpha=0.5, reg_lambda=2)\n",
    "    _ = clf.fit(X_trn, np.log(y_trn), eval_set = [(X_val, np.log(y_val))], verbose=100, early_stopping_rounds=200, eval_metric='rmse')\n",
    "\n",
    "    oofs[val_idx] = np.exp(clf.predict(X_val))\n",
    "    current_test_pred = np.exp(clf.predict(X_test))\n",
    "    test_preds += np.exp(clf.predict(X_test))/max_iter\n",
    "    \n",
    "    \n",
    "    print(f'\\n Fold {rmse(np.log(y_val), np.log(oofs[val_idx]))}')\n",
    "    \n",
    "    fold_end_time = time.time()\n",
    "    total_fold_time = int(fold_end_time - fold_start_time)\n",
    "    \n",
    "    print(f\"\\n->-> Fold ran for {(total_fold_time)//60} minutes {(total_fold_time)%60} seconds\")\n",
    "    \n",
    "\n",
    "print(f'\\nOOF val score: {rmse(np.log(target), np.log(oofs))}')\n",
    "training_end_time = time.time()\n",
    "total_training_time = int(training_end_time - training_start_time)\n",
    "\n",
    "print(f'\\n->-> Total training time: {(total_training_time)//60} minutes {(total_training_time)%60} seconds')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "OOF val score: 0.42509485335953884\n"
     ]
    }
   ],
   "source": [
    "print(f'\\nOOF val score: {rmse(np.log(target), np.log(oofs))}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "vp0, tp0 = oofs, test_preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "---- Fold 0 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.91302\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.43136\n",
      "[200]\tvalidation_0-rmse:0.42747\n",
      "[300]\tvalidation_0-rmse:0.42524\n",
      "[400]\tvalidation_0-rmse:0.42438\n",
      "[500]\tvalidation_0-rmse:0.42525\n",
      "Stopping. Best iteration:\n",
      "[370]\tvalidation_0-rmse:0.42347\n",
      "\n",
      "\n",
      " Fold 0.42346924932591967\n",
      "\n",
      "->-> Fold ran for 3 minutes 56 seconds\n",
      "\n",
      "---- Fold 1 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.89285\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.44585\n",
      "[200]\tvalidation_0-rmse:0.44360\n",
      "[300]\tvalidation_0-rmse:0.44173\n",
      "[400]\tvalidation_0-rmse:0.44117\n",
      "[500]\tvalidation_0-rmse:0.44112\n",
      "[600]\tvalidation_0-rmse:0.44108\n",
      "[700]\tvalidation_0-rmse:0.44106\n",
      "[800]\tvalidation_0-rmse:0.44083\n",
      "[900]\tvalidation_0-rmse:0.44017\n",
      "[999]\tvalidation_0-rmse:0.43999\n",
      "\n",
      " Fold 0.43990983068339895\n",
      "\n",
      "->-> Fold ran for 6 minutes 18 seconds\n",
      "\n",
      "---- Fold 2 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.87175\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.44412\n",
      "[200]\tvalidation_0-rmse:0.44211\n",
      "[300]\tvalidation_0-rmse:0.44125\n",
      "[400]\tvalidation_0-rmse:0.44168\n",
      "Stopping. Best iteration:\n",
      "[248]\tvalidation_0-rmse:0.44081\n",
      "\n",
      "\n",
      " Fold 0.44081243276962007\n",
      "\n",
      "->-> Fold ran for 3 minutes 1 seconds\n",
      "\n",
      "---- Fold 3 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.91438\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.45489\n",
      "[200]\tvalidation_0-rmse:0.45132\n",
      "[300]\tvalidation_0-rmse:0.44918\n",
      "[400]\tvalidation_0-rmse:0.44842\n",
      "[500]\tvalidation_0-rmse:0.44684\n",
      "[600]\tvalidation_0-rmse:0.44721\n",
      "Stopping. Best iteration:\n",
      "[478]\tvalidation_0-rmse:0.44668\n",
      "\n",
      "\n",
      " Fold 0.4466838457757676\n",
      "\n",
      "->-> Fold ran for 4 minutes 18 seconds\n",
      "\n",
      "---- Fold 4 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.90597\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.33228\n",
      "[200]\tvalidation_0-rmse:0.32144\n",
      "[300]\tvalidation_0-rmse:0.32091\n",
      "[400]\tvalidation_0-rmse:0.32124\n",
      "[500]\tvalidation_0-rmse:0.32318\n",
      "Stopping. Best iteration:\n",
      "[350]\tvalidation_0-rmse:0.32025\n",
      "\n",
      "\n",
      " Fold 0.32025131566356557\n",
      "\n",
      "->-> Fold ran for 3 minutes 33 seconds\n",
      "\n",
      "---- Fold 5 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.91760\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.44962\n",
      "[200]\tvalidation_0-rmse:0.43913\n",
      "[300]\tvalidation_0-rmse:0.43920\n",
      "[400]\tvalidation_0-rmse:0.44034\n",
      "Stopping. Best iteration:\n",
      "[267]\tvalidation_0-rmse:0.43872\n",
      "\n",
      "\n",
      " Fold 0.438721275209041\n",
      "\n",
      "->-> Fold ran for 3 minutes 10 seconds\n",
      "\n",
      "---- Fold 6 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.89767\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.46446\n",
      "[200]\tvalidation_0-rmse:0.45501\n",
      "[300]\tvalidation_0-rmse:0.44838\n",
      "[400]\tvalidation_0-rmse:0.44609\n",
      "[500]\tvalidation_0-rmse:0.44594\n",
      "[600]\tvalidation_0-rmse:0.44519\n",
      "[700]\tvalidation_0-rmse:0.44491\n",
      "[800]\tvalidation_0-rmse:0.44445\n",
      "[900]\tvalidation_0-rmse:0.44449\n",
      "[999]\tvalidation_0-rmse:0.44430\n",
      "\n",
      " Fold 0.44385538670618246\n",
      "\n",
      "->-> Fold ran for 6 minutes 17 seconds\n",
      "\n",
      "---- Fold 7 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.90251\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.53753\n",
      "[200]\tvalidation_0-rmse:0.53327\n",
      "[300]\tvalidation_0-rmse:0.53111\n",
      "[400]\tvalidation_0-rmse:0.53136\n",
      "[500]\tvalidation_0-rmse:0.53194\n",
      "Stopping. Best iteration:\n",
      "[313]\tvalidation_0-rmse:0.53051\n",
      "\n",
      "\n",
      " Fold 0.5305054695777949\n",
      "\n",
      "->-> Fold ran for 3 minutes 26 seconds\n",
      "\n",
      "---- Fold 8 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.91423\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.38198\n",
      "[200]\tvalidation_0-rmse:0.35944\n",
      "[300]\tvalidation_0-rmse:0.35709\n",
      "[400]\tvalidation_0-rmse:0.35672\n",
      "[500]\tvalidation_0-rmse:0.35811\n",
      "[600]\tvalidation_0-rmse:0.35932\n",
      "Stopping. Best iteration:\n",
      "[419]\tvalidation_0-rmse:0.35637\n",
      "\n",
      "\n",
      " Fold 0.3563691008560437\n",
      "\n",
      "->-> Fold ran for 3 minutes 56 seconds\n",
      "\n",
      "---- Fold 9 -----\n",
      "\n",
      "11227 11227\n",
      "[0]\tvalidation_0-rmse:8.89465\n",
      "Will train until validation_0-rmse hasn't improved in 200 rounds.\n",
      "[100]\tvalidation_0-rmse:0.46047\n",
      "[200]\tvalidation_0-rmse:0.44479\n",
      "[300]\tvalidation_0-rmse:0.44148\n",
      "[400]\tvalidation_0-rmse:0.44200\n",
      "[500]\tvalidation_0-rmse:0.44361\n",
      "Stopping. Best iteration:\n",
      "[321]\tvalidation_0-rmse:0.44052\n",
      "\n",
      "\n",
      " Fold 0.4405237219581138\n",
      "\n",
      "->-> Fold ran for 3 minutes 18 seconds\n",
      "\n",
      "OOF val score: 0.4313923296593689\n",
      "\n",
      "->-> Total training time: 41 minutes 16 seconds\n"
     ]
    }
   ],
   "source": [
    "training_start_time = time.time()\n",
    "\n",
    "max_iter = 10\n",
    "folds = StratifiedKFold(n_splits = max_iter)\n",
    "oofs = np.zeros(len(train))\n",
    "test_preds = np.zeros(len(test))\n",
    "\n",
    "\n",
    "for fold_, (trn_idx, val_idx) in enumerate(folds.split(train, pd.qcut(target, 10, labels=False, duplicates='drop'))):\n",
    "    \n",
    "    print(f'\\n---- Fold {fold_} -----\\n')\n",
    "    \n",
    "    fold_start_time = time.time()\n",
    "    \n",
    "    X_trn, y_trn = train.iloc[trn_idx][features], target.iloc[trn_idx]\n",
    "    X_val, y_val = train.iloc[val_idx][features], target.iloc[val_idx]\n",
    "    X_test = test[features]\n",
    "    print(X_trn.shape[1], X_val.shape[1])\n",
    "    \n",
    "\n",
    "    clf = XGBRegressor(n_estimators=1000, max_depth=12, learning_rate=0.05, colsample_bytree=0.45)\n",
    "    _ = clf.fit(X_trn, np.log(y_trn), eval_set = [(X_val, np.log(y_val))], verbose=100, early_stopping_rounds=200, eval_metric='rmse')\n",
    "    \n",
    "\n",
    "    oofs[val_idx] = np.exp(clf.predict(X_val))\n",
    "    current_test_pred = np.exp(clf.predict(X_test))\n",
    "    test_preds += np.exp(clf.predict(X_test))/max_iter\n",
    "    \n",
    "    \n",
    "    print(f'\\n Fold {rmse(np.log(y_val), np.log(oofs[val_idx]))}')\n",
    "    \n",
    "    fold_end_time = time.time()\n",
    "    total_fold_time = int(fold_end_time - fold_start_time)\n",
    "    \n",
    "    print(f\"\\n->-> Fold ran for {(total_fold_time)//60} minutes {(total_fold_time)%60} seconds\")\n",
    "    \n",
    "\n",
    "print(f'\\nOOF val score: {rmse(np.log(target), np.log(oofs))}')\n",
    "training_end_time = time.time()\n",
    "total_training_time = int(training_end_time - training_start_time)\n",
    "\n",
    "print(f'\\n->-> Total training time: {(total_training_time)//60} minutes {(total_training_time)%60} seconds')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "vp1, tp1 = oofs, test_preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tp1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "---- Fold 0 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8223909\ttest: 0.7983530\tbest: 0.7983530 (0)\ttotal: 224ms\tremaining: 7m 28s\n",
      "100:\tlearn: 0.4664084\ttest: 0.4909600\tbest: 0.4909360 (99)\ttotal: 12.8s\tremaining: 4m\n",
      "200:\tlearn: 0.3999007\ttest: 0.4616260\tbest: 0.4616260 (200)\ttotal: 25.8s\tremaining: 3m 50s\n",
      "300:\tlearn: 0.3495631\ttest: 0.4466334\tbest: 0.4466334 (300)\ttotal: 39.1s\tremaining: 3m 40s\n",
      "400:\tlearn: 0.3182564\ttest: 0.4422385\tbest: 0.4421309 (382)\ttotal: 51.8s\tremaining: 3m 26s\n",
      "500:\tlearn: 0.2900792\ttest: 0.4381738\tbest: 0.4381738 (500)\ttotal: 1m 4s\tremaining: 3m 13s\n",
      "600:\tlearn: 0.2689368\ttest: 0.4369230\tbest: 0.4368710 (565)\ttotal: 1m 17s\tremaining: 3m\n",
      "700:\tlearn: 0.2497412\ttest: 0.4360137\tbest: 0.4357959 (694)\ttotal: 1m 30s\tremaining: 2m 47s\n",
      "800:\tlearn: 0.2344139\ttest: 0.4344313\tbest: 0.4343043 (795)\ttotal: 1m 43s\tremaining: 2m 34s\n",
      "900:\tlearn: 0.2206543\ttest: 0.4338882\tbest: 0.4338882 (900)\ttotal: 1m 55s\tremaining: 2m 21s\n",
      "1000:\tlearn: 0.2098987\ttest: 0.4326616\tbest: 0.4326592 (996)\ttotal: 2m 8s\tremaining: 2m 8s\n",
      "1100:\tlearn: 0.1994162\ttest: 0.4327393\tbest: 0.4326223 (1004)\ttotal: 2m 21s\tremaining: 1m 55s\n",
      "1200:\tlearn: 0.1906369\ttest: 0.4329649\tbest: 0.4326223 (1004)\ttotal: 2m 34s\tremaining: 1m 42s\n",
      "Stopped by overfitting detector  (200 iterations wait)\n",
      "\n",
      "bestTest = 0.4326222893\n",
      "bestIteration = 1004\n",
      "\n",
      "Shrink model to first 1005 iterations.\n",
      "\n",
      " Fold 0.4326223061979128\n",
      "\n",
      "->-> Fold ran for 2 minutes 39 seconds\n",
      "\n",
      "---- Fold 1 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8209018\ttest: 0.8030271\tbest: 0.8030271 (0)\ttotal: 126ms\tremaining: 4m 11s\n",
      "100:\tlearn: 0.4649225\ttest: 0.5069939\tbest: 0.5069939 (100)\ttotal: 12.7s\tremaining: 3m 59s\n",
      "200:\tlearn: 0.3972434\ttest: 0.4878356\tbest: 0.4878356 (200)\ttotal: 25.4s\tremaining: 3m 47s\n",
      "300:\tlearn: 0.3464381\ttest: 0.4759937\tbest: 0.4759937 (300)\ttotal: 38.6s\tremaining: 3m 38s\n",
      "400:\tlearn: 0.3138261\ttest: 0.4695757\tbest: 0.4695116 (399)\ttotal: 51.7s\tremaining: 3m 26s\n",
      "500:\tlearn: 0.2884204\ttest: 0.4647017\tbest: 0.4646054 (493)\ttotal: 1m 4s\tremaining: 3m 12s\n",
      "600:\tlearn: 0.2687014\ttest: 0.4618702\tbest: 0.4618702 (600)\ttotal: 1m 17s\tremaining: 2m 59s\n",
      "700:\tlearn: 0.2514078\ttest: 0.4586366\tbest: 0.4586287 (697)\ttotal: 1m 29s\tremaining: 2m 46s\n",
      "800:\tlearn: 0.2349839\ttest: 0.4560377\tbest: 0.4560035 (796)\ttotal: 1m 42s\tremaining: 2m 33s\n",
      "900:\tlearn: 0.2222008\ttest: 0.4549467\tbest: 0.4548819 (897)\ttotal: 1m 55s\tremaining: 2m 21s\n",
      "1000:\tlearn: 0.2105839\ttest: 0.4541901\tbest: 0.4538682 (992)\ttotal: 2m 8s\tremaining: 2m 8s\n",
      "1100:\tlearn: 0.2006371\ttest: 0.4529415\tbest: 0.4529405 (1097)\ttotal: 2m 21s\tremaining: 1m 55s\n",
      "1200:\tlearn: 0.1913511\ttest: 0.4522488\tbest: 0.4522263 (1198)\ttotal: 2m 33s\tremaining: 1m 42s\n",
      "1300:\tlearn: 0.1827805\ttest: 0.4514425\tbest: 0.4512397 (1272)\ttotal: 2m 46s\tremaining: 1m 29s\n",
      "1400:\tlearn: 0.1745713\ttest: 0.4505101\tbest: 0.4504271 (1364)\ttotal: 2m 59s\tremaining: 1m 16s\n",
      "1500:\tlearn: 0.1676421\ttest: 0.4505012\tbest: 0.4502451 (1447)\ttotal: 3m 12s\tremaining: 1m 4s\n",
      "1600:\tlearn: 0.1608620\ttest: 0.4502697\tbest: 0.4501735 (1592)\ttotal: 3m 25s\tremaining: 51.2s\n",
      "1700:\tlearn: 0.1545894\ttest: 0.4501438\tbest: 0.4500369 (1665)\ttotal: 3m 37s\tremaining: 38.3s\n",
      "1800:\tlearn: 0.1489575\ttest: 0.4501011\tbest: 0.4500369 (1665)\ttotal: 3m 51s\tremaining: 25.5s\n",
      "1900:\tlearn: 0.1427335\ttest: 0.4496548\tbest: 0.4495773 (1887)\ttotal: 4m 3s\tremaining: 12.7s\n",
      "1999:\tlearn: 0.1378619\ttest: 0.4496051\tbest: 0.4494427 (1946)\ttotal: 4m 16s\tremaining: 0us\n",
      "\n",
      "bestTest = 0.4494427256\n",
      "bestIteration = 1946\n",
      "\n",
      "Shrink model to first 1947 iterations.\n",
      "\n",
      " Fold 0.4494427336229245\n",
      "\n",
      "->-> Fold ran for 4 minutes 21 seconds\n",
      "\n",
      "---- Fold 2 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8149353\ttest: 0.8740616\tbest: 0.8740616 (0)\ttotal: 125ms\tremaining: 4m 9s\n",
      "100:\tlearn: 0.4695187\ttest: 0.5142919\tbest: 0.5142919 (100)\ttotal: 12.6s\tremaining: 3m 57s\n",
      "200:\tlearn: 0.4042051\ttest: 0.4782768\tbest: 0.4782768 (200)\ttotal: 25.5s\tremaining: 3m 48s\n",
      "300:\tlearn: 0.3532891\ttest: 0.4592827\tbest: 0.4590866 (295)\ttotal: 38.7s\tremaining: 3m 38s\n",
      "400:\tlearn: 0.3200102\ttest: 0.4522995\tbest: 0.4522995 (400)\ttotal: 51.4s\tremaining: 3m 24s\n",
      "500:\tlearn: 0.2946042\ttest: 0.4477946\tbest: 0.4476668 (498)\ttotal: 1m 4s\tremaining: 3m 13s\n",
      "600:\tlearn: 0.2735171\ttest: 0.4446243\tbest: 0.4446243 (600)\ttotal: 1m 17s\tremaining: 2m 59s\n",
      "700:\tlearn: 0.2558164\ttest: 0.4416519\tbest: 0.4413762 (690)\ttotal: 1m 30s\tremaining: 2m 47s\n",
      "800:\tlearn: 0.2405494\ttest: 0.4409714\tbest: 0.4408670 (738)\ttotal: 1m 43s\tremaining: 2m 34s\n",
      "900:\tlearn: 0.2271377\ttest: 0.4404086\tbest: 0.4403525 (890)\ttotal: 1m 55s\tremaining: 2m 20s\n",
      "1000:\tlearn: 0.2140687\ttest: 0.4399588\tbest: 0.4394346 (927)\ttotal: 2m 8s\tremaining: 2m 7s\n",
      "1100:\tlearn: 0.2040738\ttest: 0.4398554\tbest: 0.4394346 (927)\ttotal: 2m 20s\tremaining: 1m 54s\n",
      "Stopped by overfitting detector  (200 iterations wait)\n",
      "\n",
      "bestTest = 0.4394345648\n",
      "bestIteration = 927\n",
      "\n",
      "Shrink model to first 928 iterations.\n",
      "\n",
      " Fold 0.43943457453983403\n",
      "\n",
      "->-> Fold ran for 2 minutes 28 seconds\n",
      "\n",
      "---- Fold 3 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8239767\ttest: 0.7794947\tbest: 0.7794947 (0)\ttotal: 152ms\tremaining: 5m 4s\n",
      "100:\tlearn: 0.4626592\ttest: 0.4940404\tbest: 0.4940404 (100)\ttotal: 13s\tremaining: 4m 4s\n",
      "200:\tlearn: 0.3982479\ttest: 0.4711375\tbest: 0.4711375 (200)\ttotal: 25.5s\tremaining: 3m 47s\n",
      "300:\tlearn: 0.3505296\ttest: 0.4592911\tbest: 0.4592911 (300)\ttotal: 38.2s\tremaining: 3m 35s\n",
      "400:\tlearn: 0.3154238\ttest: 0.4541489\tbest: 0.4541489 (400)\ttotal: 50.8s\tremaining: 3m 22s\n",
      "500:\tlearn: 0.2901357\ttest: 0.4508458\tbest: 0.4508458 (500)\ttotal: 1m 3s\tremaining: 3m 10s\n",
      "600:\tlearn: 0.2689843\ttest: 0.4493052\tbest: 0.4490422 (590)\ttotal: 1m 16s\tremaining: 2m 58s\n",
      "700:\tlearn: 0.2511051\ttest: 0.4478725\tbest: 0.4477986 (664)\ttotal: 1m 28s\tremaining: 2m 44s\n",
      "800:\tlearn: 0.2357181\ttest: 0.4457893\tbest: 0.4457893 (800)\ttotal: 1m 41s\tremaining: 2m 31s\n",
      "900:\tlearn: 0.2217753\ttest: 0.4432039\tbest: 0.4432039 (900)\ttotal: 1m 54s\tremaining: 2m 19s\n",
      "1000:\tlearn: 0.2103632\ttest: 0.4415925\tbest: 0.4415664 (999)\ttotal: 2m 7s\tremaining: 2m 6s\n",
      "1100:\tlearn: 0.2002351\ttest: 0.4402600\tbest: 0.4401229 (1097)\ttotal: 2m 19s\tremaining: 1m 54s\n",
      "1200:\tlearn: 0.1906601\ttest: 0.4401298\tbest: 0.4396735 (1142)\ttotal: 2m 32s\tremaining: 1m 41s\n",
      "1300:\tlearn: 0.1815988\ttest: 0.4395909\tbest: 0.4395596 (1299)\ttotal: 2m 44s\tremaining: 1m 28s\n",
      "1400:\tlearn: 0.1734111\ttest: 0.4388119\tbest: 0.4386680 (1387)\ttotal: 2m 57s\tremaining: 1m 15s\n",
      "1500:\tlearn: 0.1663281\ttest: 0.4381007\tbest: 0.4380229 (1491)\ttotal: 3m 10s\tremaining: 1m 3s\n",
      "1600:\tlearn: 0.1590780\ttest: 0.4377621\tbest: 0.4376146 (1571)\ttotal: 3m 23s\tremaining: 50.6s\n",
      "1700:\tlearn: 0.1525085\ttest: 0.4380211\tbest: 0.4376146 (1571)\ttotal: 3m 35s\tremaining: 37.9s\n",
      "1800:\tlearn: 0.1465909\ttest: 0.4376210\tbest: 0.4373524 (1771)\ttotal: 3m 48s\tremaining: 25.2s\n",
      "1900:\tlearn: 0.1412743\ttest: 0.4369291\tbest: 0.4369012 (1893)\ttotal: 4m 1s\tremaining: 12.6s\n",
      "1999:\tlearn: 0.1360863\ttest: 0.4365889\tbest: 0.4365676 (1991)\ttotal: 4m 14s\tremaining: 0us\n",
      "\n",
      "bestTest = 0.4365675953\n",
      "bestIteration = 1991\n",
      "\n",
      "Shrink model to first 1992 iterations.\n",
      "\n",
      " Fold 0.4365676070460025\n",
      "\n",
      "->-> Fold ran for 4 minutes 18 seconds\n",
      "\n",
      "---- Fold 4 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8222364\ttest: 0.7937785\tbest: 0.7937785 (0)\ttotal: 126ms\tremaining: 4m 11s\n",
      "100:\tlearn: 0.4799861\ttest: 0.4112975\tbest: 0.4112975 (100)\ttotal: 13s\tremaining: 4m 4s\n",
      "200:\tlearn: 0.4130215\ttest: 0.3707283\tbest: 0.3707283 (200)\ttotal: 25.7s\tremaining: 3m 50s\n",
      "300:\tlearn: 0.3604361\ttest: 0.3450759\tbest: 0.3450759 (300)\ttotal: 38.7s\tremaining: 3m 38s\n",
      "400:\tlearn: 0.3248986\ttest: 0.3333305\tbest: 0.3333305 (400)\ttotal: 51.9s\tremaining: 3m 26s\n",
      "500:\tlearn: 0.2980588\ttest: 0.3258027\tbest: 0.3257518 (498)\ttotal: 1m 4s\tremaining: 3m 13s\n",
      "600:\tlearn: 0.2763018\ttest: 0.3213327\tbest: 0.3213327 (600)\ttotal: 1m 17s\tremaining: 3m\n",
      "700:\tlearn: 0.2584840\ttest: 0.3191029\tbest: 0.3190266 (697)\ttotal: 1m 30s\tremaining: 2m 48s\n",
      "800:\tlearn: 0.2430362\ttest: 0.3173823\tbest: 0.3173175 (795)\ttotal: 1m 44s\tremaining: 2m 35s\n",
      "900:\tlearn: 0.2296460\ttest: 0.3160987\tbest: 0.3160101 (893)\ttotal: 1m 56s\tremaining: 2m 22s\n",
      "1000:\tlearn: 0.2172263\ttest: 0.3149947\tbest: 0.3149947 (1000)\ttotal: 2m 9s\tremaining: 2m 9s\n",
      "1100:\tlearn: 0.2070574\ttest: 0.3151497\tbest: 0.3148115 (1078)\ttotal: 2m 22s\tremaining: 1m 56s\n",
      "1200:\tlearn: 0.1976943\ttest: 0.3149672\tbest: 0.3148115 (1078)\ttotal: 2m 35s\tremaining: 1m 43s\n",
      "Stopped by overfitting detector  (200 iterations wait)\n",
      "\n",
      "bestTest = 0.3148114989\n",
      "bestIteration = 1078\n",
      "\n",
      "Shrink model to first 1079 iterations.\n",
      "\n",
      " Fold 0.31481151745488783\n",
      "\n",
      "->-> Fold ran for 2 minutes 50 seconds\n",
      "\n",
      "---- Fold 5 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8220105\ttest: 0.8105433\tbest: 0.8105433 (0)\ttotal: 127ms\tremaining: 4m 14s\n",
      "100:\tlearn: 0.4649992\ttest: 0.4881643\tbest: 0.4881014 (99)\ttotal: 12.9s\tremaining: 4m 2s\n",
      "200:\tlearn: 0.4016250\ttest: 0.4704094\tbest: 0.4704094 (200)\ttotal: 25.6s\tremaining: 3m 49s\n",
      "300:\tlearn: 0.3519633\ttest: 0.4590239\tbest: 0.4590239 (300)\ttotal: 38.6s\tremaining: 3m 37s\n",
      "400:\tlearn: 0.3182256\ttest: 0.4576683\tbest: 0.4576069 (397)\ttotal: 51.7s\tremaining: 3m 26s\n",
      "500:\tlearn: 0.2932952\ttest: 0.4566354\tbest: 0.4562224 (450)\ttotal: 1m 4s\tremaining: 3m 13s\n",
      "600:\tlearn: 0.2732275\ttest: 0.4547035\tbest: 0.4546449 (599)\ttotal: 1m 17s\tremaining: 3m 1s\n",
      "700:\tlearn: 0.2545276\ttest: 0.4538620\tbest: 0.4538620 (700)\ttotal: 1m 30s\tremaining: 2m 47s\n",
      "800:\tlearn: 0.2394123\ttest: 0.4532644\tbest: 0.4531139 (794)\ttotal: 1m 43s\tremaining: 2m 34s\n",
      "900:\tlearn: 0.2261634\ttest: 0.4523719\tbest: 0.4522121 (874)\ttotal: 1m 56s\tremaining: 2m 22s\n",
      "1000:\tlearn: 0.2145635\ttest: 0.4511944\tbest: 0.4511944 (1000)\ttotal: 2m 9s\tremaining: 2m 9s\n",
      "1100:\tlearn: 0.2025815\ttest: 0.4511220\tbest: 0.4508116 (1050)\ttotal: 2m 22s\tremaining: 1m 56s\n",
      "1200:\tlearn: 0.1936213\ttest: 0.4508872\tbest: 0.4508116 (1050)\ttotal: 2m 34s\tremaining: 1m 43s\n",
      "Stopped by overfitting detector  (200 iterations wait)\n",
      "\n",
      "bestTest = 0.4508116487\n",
      "bestIteration = 1050\n",
      "\n",
      "Shrink model to first 1051 iterations.\n",
      "\n",
      " Fold 0.45081163759191667\n",
      "\n",
      "->-> Fold ran for 2 minutes 45 seconds\n",
      "\n",
      "---- Fold 6 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8182684\ttest: 0.8392074\tbest: 0.8392074 (0)\ttotal: 167ms\tremaining: 5m 34s\n",
      "100:\tlearn: 0.4665750\ttest: 0.5302013\tbest: 0.5302013 (100)\ttotal: 13.4s\tremaining: 4m 12s\n",
      "200:\tlearn: 0.3992189\ttest: 0.4877745\tbest: 0.4877745 (200)\ttotal: 26.3s\tremaining: 3m 54s\n",
      "300:\tlearn: 0.3508936\ttest: 0.4700255\tbest: 0.4700255 (300)\ttotal: 39.1s\tremaining: 3m 40s\n",
      "400:\tlearn: 0.3197284\ttest: 0.4622684\tbest: 0.4622684 (400)\ttotal: 52s\tremaining: 3m 27s\n",
      "500:\tlearn: 0.2932161\ttest: 0.4554465\tbest: 0.4554465 (500)\ttotal: 1m 5s\tremaining: 3m 15s\n",
      "600:\tlearn: 0.2725847\ttest: 0.4525583\tbest: 0.4525583 (600)\ttotal: 1m 18s\tremaining: 3m 2s\n",
      "700:\tlearn: 0.2557048\ttest: 0.4496608\tbest: 0.4496222 (697)\ttotal: 1m 31s\tremaining: 2m 49s\n",
      "800:\tlearn: 0.2410869\ttest: 0.4478362\tbest: 0.4476173 (777)\ttotal: 1m 44s\tremaining: 2m 35s\n",
      "900:\tlearn: 0.2281801\ttest: 0.4462990\tbest: 0.4462990 (900)\ttotal: 1m 56s\tremaining: 2m 22s\n",
      "1000:\tlearn: 0.2161380\ttest: 0.4432874\tbest: 0.4432697 (997)\ttotal: 2m 9s\tremaining: 2m 9s\n",
      "1100:\tlearn: 0.2057612\ttest: 0.4425899\tbest: 0.4425722 (1045)\ttotal: 2m 22s\tremaining: 1m 56s\n",
      "1200:\tlearn: 0.1971542\ttest: 0.4417157\tbest: 0.4416807 (1189)\ttotal: 2m 35s\tremaining: 1m 43s\n",
      "1300:\tlearn: 0.1887378\ttest: 0.4406213\tbest: 0.4405210 (1290)\ttotal: 2m 48s\tremaining: 1m 30s\n",
      "1400:\tlearn: 0.1807886\ttest: 0.4399897\tbest: 0.4398230 (1373)\ttotal: 3m 1s\tremaining: 1m 17s\n",
      "1500:\tlearn: 0.1738510\ttest: 0.4392265\tbest: 0.4392265 (1500)\ttotal: 3m 14s\tremaining: 1m 4s\n",
      "1600:\tlearn: 0.1675707\ttest: 0.4389518\tbest: 0.4389109 (1569)\ttotal: 3m 27s\tremaining: 51.6s\n",
      "1700:\tlearn: 0.1609497\ttest: 0.4383880\tbest: 0.4382812 (1671)\ttotal: 3m 40s\tremaining: 38.7s\n",
      "1800:\tlearn: 0.1544569\ttest: 0.4376287\tbest: 0.4376287 (1800)\ttotal: 3m 52s\tremaining: 25.7s\n",
      "1900:\tlearn: 0.1491822\ttest: 0.4371042\tbest: 0.4370964 (1898)\ttotal: 4m 5s\tremaining: 12.8s\n",
      "1999:\tlearn: 0.1436138\ttest: 0.4367324\tbest: 0.4366973 (1992)\ttotal: 4m 18s\tremaining: 0us\n",
      "\n",
      "bestTest = 0.4366973451\n",
      "bestIteration = 1992\n",
      "\n",
      "Shrink model to first 1993 iterations.\n",
      "\n",
      " Fold 0.43669735131748133\n",
      "\n",
      "->-> Fold ran for 4 minutes 23 seconds\n",
      "\n",
      "---- Fold 7 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8166903\ttest: 0.8592855\tbest: 0.8592855 (0)\ttotal: 126ms\tremaining: 4m 11s\n",
      "100:\tlearn: 0.4580587\ttest: 0.5842073\tbest: 0.5842039 (98)\ttotal: 12.7s\tremaining: 3m 58s\n",
      "200:\tlearn: 0.3920050\ttest: 0.5542526\tbest: 0.5542526 (200)\ttotal: 25.5s\tremaining: 3m 48s\n",
      "300:\tlearn: 0.3447302\ttest: 0.5426699\tbest: 0.5426699 (300)\ttotal: 38.4s\tremaining: 3m 36s\n",
      "400:\tlearn: 0.3128964\ttest: 0.5371559\tbest: 0.5368634 (398)\ttotal: 51.4s\tremaining: 3m 24s\n",
      "500:\tlearn: 0.2877056\ttest: 0.5329551\tbest: 0.5329551 (500)\ttotal: 1m 4s\tremaining: 3m 11s\n",
      "600:\tlearn: 0.2678403\ttest: 0.5289033\tbest: 0.5289033 (600)\ttotal: 1m 16s\tremaining: 2m 58s\n",
      "700:\tlearn: 0.2514850\ttest: 0.5257075\tbest: 0.5256395 (691)\ttotal: 1m 29s\tremaining: 2m 45s\n",
      "800:\tlearn: 0.2369061\ttest: 0.5239575\tbest: 0.5237260 (781)\ttotal: 1m 42s\tremaining: 2m 33s\n",
      "900:\tlearn: 0.2245664\ttest: 0.5231286\tbest: 0.5229361 (897)\ttotal: 1m 55s\tremaining: 2m 20s\n",
      "1000:\tlearn: 0.2132166\ttest: 0.5228037\tbest: 0.5226899 (982)\ttotal: 2m 8s\tremaining: 2m 8s\n",
      "1100:\tlearn: 0.2029044\ttest: 0.5221880\tbest: 0.5221470 (1096)\ttotal: 2m 21s\tremaining: 1m 55s\n",
      "1200:\tlearn: 0.1940429\ttest: 0.5224780\tbest: 0.5217757 (1156)\ttotal: 2m 34s\tremaining: 1m 42s\n",
      "1300:\tlearn: 0.1855290\ttest: 0.5226641\tbest: 0.5217757 (1156)\ttotal: 2m 47s\tremaining: 1m 29s\n",
      "Stopped by overfitting detector  (200 iterations wait)\n",
      "\n",
      "bestTest = 0.5217757245\n",
      "bestIteration = 1156\n",
      "\n",
      "Shrink model to first 1157 iterations.\n",
      "\n",
      " Fold 0.521775719251047\n",
      "\n",
      "->-> Fold ran for 2 minutes 59 seconds\n",
      "\n",
      "---- Fold 8 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8204464\ttest: 0.7954230\tbest: 0.7954230 (0)\ttotal: 127ms\tremaining: 4m 13s\n",
      "100:\tlearn: 0.4758890\ttest: 0.4693097\tbest: 0.4693097 (100)\ttotal: 12.9s\tremaining: 4m 2s\n",
      "200:\tlearn: 0.4076569\ttest: 0.4308353\tbest: 0.4308353 (200)\ttotal: 25.7s\tremaining: 3m 50s\n",
      "300:\tlearn: 0.3587539\ttest: 0.4068593\tbest: 0.4068593 (300)\ttotal: 38.8s\tremaining: 3m 39s\n",
      "400:\tlearn: 0.3245264\ttest: 0.3950709\tbest: 0.3950709 (400)\ttotal: 52.2s\tremaining: 3m 28s\n",
      "500:\tlearn: 0.2974298\ttest: 0.3890628\tbest: 0.3890628 (500)\ttotal: 1m 4s\tremaining: 3m 14s\n",
      "600:\tlearn: 0.2742212\ttest: 0.3841411\tbest: 0.3841411 (600)\ttotal: 1m 17s\tremaining: 3m 1s\n",
      "700:\tlearn: 0.2551214\ttest: 0.3807916\tbest: 0.3807714 (699)\ttotal: 1m 30s\tremaining: 2m 48s\n",
      "800:\tlearn: 0.2393247\ttest: 0.3807823\tbest: 0.3807577 (795)\ttotal: 1m 43s\tremaining: 2m 35s\n",
      "900:\tlearn: 0.2266577\ttest: 0.3803371\tbest: 0.3802055 (896)\ttotal: 1m 56s\tremaining: 2m 22s\n",
      "1000:\tlearn: 0.2146903\ttest: 0.3794523\tbest: 0.3794229 (997)\ttotal: 2m 9s\tremaining: 2m 9s\n",
      "1100:\tlearn: 0.2036084\ttest: 0.3775937\tbest: 0.3775494 (1098)\ttotal: 2m 22s\tremaining: 1m 56s\n",
      "1200:\tlearn: 0.1941849\ttest: 0.3767495\tbest: 0.3767470 (1199)\ttotal: 2m 34s\tremaining: 1m 43s\n",
      "1300:\tlearn: 0.1859258\ttest: 0.3775773\tbest: 0.3767222 (1211)\ttotal: 2m 47s\tremaining: 1m 30s\n",
      "1400:\tlearn: 0.1778705\ttest: 0.3774255\tbest: 0.3767222 (1211)\ttotal: 3m\tremaining: 1m 17s\n",
      "Stopped by overfitting detector  (200 iterations wait)\n",
      "\n",
      "bestTest = 0.3767222305\n",
      "bestIteration = 1211\n",
      "\n",
      "Shrink model to first 1212 iterations.\n",
      "\n",
      " Fold 0.37672223602050964\n",
      "\n",
      "->-> Fold ran for 3 minutes 6 seconds\n",
      "\n",
      "---- Fold 9 -----\n",
      "\n",
      "11227 11227\n",
      "0:\tlearn: 0.8163960\ttest: 0.8437218\tbest: 0.8437218 (0)\ttotal: 126ms\tremaining: 4m 11s\n",
      "100:\tlearn: 0.4675400\ttest: 0.5171833\tbest: 0.5171833 (100)\ttotal: 12.7s\tremaining: 3m 59s\n",
      "200:\tlearn: 0.4012507\ttest: 0.4911959\tbest: 0.4911361 (198)\ttotal: 25.3s\tremaining: 3m 46s\n",
      "300:\tlearn: 0.3524860\ttest: 0.4756774\tbest: 0.4756772 (299)\ttotal: 38.4s\tremaining: 3m 36s\n",
      "400:\tlearn: 0.3199971\ttest: 0.4663086\tbest: 0.4663084 (399)\ttotal: 51.2s\tremaining: 3m 24s\n",
      "500:\tlearn: 0.2942932\ttest: 0.4592397\tbest: 0.4592397 (500)\ttotal: 1m 3s\tremaining: 3m 11s\n",
      "600:\tlearn: 0.2722271\ttest: 0.4534380\tbest: 0.4534365 (598)\ttotal: 1m 16s\tremaining: 2m 58s\n",
      "700:\tlearn: 0.2553657\ttest: 0.4498215\tbest: 0.4495978 (695)\ttotal: 1m 29s\tremaining: 2m 45s\n",
      "800:\tlearn: 0.2408523\ttest: 0.4482090\tbest: 0.4480551 (780)\ttotal: 1m 42s\tremaining: 2m 33s\n",
      "900:\tlearn: 0.2275359\ttest: 0.4451674\tbest: 0.4451498 (892)\ttotal: 1m 55s\tremaining: 2m 20s\n",
      "1000:\tlearn: 0.2162028\ttest: 0.4437344\tbest: 0.4436822 (992)\ttotal: 2m 7s\tremaining: 2m 7s\n",
      "1100:\tlearn: 0.2055523\ttest: 0.4424288\tbest: 0.4423754 (1098)\ttotal: 2m 20s\tremaining: 1m 54s\n",
      "1200:\tlearn: 0.1963515\ttest: 0.4416238\tbest: 0.4416056 (1191)\ttotal: 2m 33s\tremaining: 1m 41s\n",
      "1300:\tlearn: 0.1876800\ttest: 0.4411862\tbest: 0.4410490 (1252)\ttotal: 2m 45s\tremaining: 1m 29s\n",
      "1400:\tlearn: 0.1799621\ttest: 0.4412554\tbest: 0.4410490 (1252)\ttotal: 2m 58s\tremaining: 1m 16s\n",
      "Stopped by overfitting detector  (200 iterations wait)\n",
      "\n",
      "bestTest = 0.441049027\n",
      "bestIteration = 1252\n",
      "\n",
      "Shrink model to first 1253 iterations.\n",
      "\n",
      " Fold 0.4410490177954065\n",
      "\n",
      "->-> Fold ran for 3 minutes 9 seconds\n",
      "\n",
      "OOF val score: 0.4329408220444261\n",
      "\n",
      "->-> Total training time: 33 minutes 4 seconds\n"
     ]
    }
   ],
   "source": [
    "training_start_time = time.time()\n",
    "\n",
    "max_iter = 10\n",
    "folds = StratifiedKFold(n_splits = max_iter)\n",
    "oofs = np.zeros(len(train))\n",
    "test_preds = np.zeros(len(test))\n",
    "\n",
    "\n",
    "for fold_, (trn_idx, val_idx) in enumerate(folds.split(train, pd.qcut(target, 10, labels=False, duplicates='drop'))):\n",
    "    \n",
    "    print(f'\\n---- Fold {fold_} -----\\n')\n",
    "    \n",
    "    fold_start_time = time.time()\n",
    "    \n",
    "    X_trn, y_trn = train.iloc[trn_idx][features], target.iloc[trn_idx]\n",
    "    X_val, y_val = train.iloc[val_idx][features], target.iloc[val_idx]\n",
    "    X_test = test[features]\n",
    "    print(X_trn.shape[1], X_val.shape[1])\n",
    "    \n",
    "    \n",
    "    \n",
    "    clf = CatBoostRegressor(n_estimators=2000, learning_rate=0.05, max_depth=9, rsm=0.5)\n",
    "    _ = clf.fit(X_trn, np.log(y_trn), eval_set = [(X_val, np.log(y_val))], verbose=100, early_stopping_rounds=200)\n",
    "\n",
    "    oofs[val_idx] = np.exp(clf.predict(X_val))\n",
    "    current_test_pred = np.exp(clf.predict(X_test))\n",
    "    test_preds += np.exp(clf.predict(X_test))/max_iter\n",
    "    \n",
    "    \n",
    "    \n",
    "    print(f'\\n Fold {rmse(np.log(y_val), np.log(oofs[val_idx]))}')\n",
    "    \n",
    "    fold_end_time = time.time()\n",
    "    total_fold_time = int(fold_end_time - fold_start_time)\n",
    "    \n",
    "    print(f\"\\n->-> Fold ran for {(total_fold_time)//60} minutes {(total_fold_time)%60} seconds\")\n",
    "    \n",
    "\n",
    "print(f'\\nOOF val score: {rmse(np.log(target), np.log(oofs))}')\n",
    "training_end_time = time.time()\n",
    "total_training_time = int(training_end_time - training_start_time)\n",
    "\n",
    "print(f'\\n->-> Total training time: {(total_training_time)//60} minutes {(total_training_time)%60} seconds')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "vp2, tp2 = oofs, test_preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.       , 0.9852083],\n",
       "       [0.9852083, 1.       ]])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.corrcoef(tp1, tp2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_preds = tp0*0.3 + tp1*0.4 + tp2*0.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "OOF val score: 0.4329408220444261\n"
     ]
    }
   ],
   "source": [
    "print(f'\\nOOF val score: {rmse(np.log(target), np.log(oofs))}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "OOF val score: 0.42141066134447913\n"
     ]
    }
   ],
   "source": [
    "print(f'\\nOOF val score: {rmse(np.log(target), np.log(vp0*0.3 + vp1*0.4 + vp2*0.3))}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count       997.000000\n",
       "mean      23746.362804\n",
       "std       17906.136170\n",
       "min        2994.720877\n",
       "25%       12755.126234\n",
       "50%       18223.154471\n",
       "75%       27780.075220\n",
       "max      115508.032103\n",
       "Name: Price, dtype: float64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sub = pd.DataFrame({'Price': test_preds})\n",
    "sub['Price'] = np.clip(sub['Price'], target.min(), target.max())\n",
    "sub['Price'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14467.069091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7961.803401</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13981.501719</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>46472.021104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6526.759492</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>27036.454688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>18944.846661</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>12050.418292</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>14074.376350</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>15000.094393</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Price\n",
       "0  14467.069091\n",
       "1   7961.803401\n",
       "2  13981.501719\n",
       "3  46472.021104\n",
       "4   6526.759492\n",
       "5  27036.454688\n",
       "6  18944.846661\n",
       "7  12050.418292\n",
       "8  14074.376350\n",
       "9  15000.094393"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sub.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "SUB_FILE_NAME = 'used_price_v18.xlsx'\n",
    "sub.to_excel(SUB_FILE_NAME, index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<a href=used_price_v18.xlsx>Download CSV file</a>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import HTML\n",
    "def create_download_link(title = \"Download CSV file\", filename = \"data.csv\"):  \n",
    "    html = '<a href={filename}>{title}</a>'\n",
    "    html = html.format(title=title,filename=filename)\n",
    "    return HTML(html)\n",
    "create_download_link(filename = SUB_FILE_NAME)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
